/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.jandan.persistence.iface;

import java.util.Date;
import java.util.List;

import com.jandan.ui.model.Lesson;
import com.jandan.ui.model.ReviewInfo;
 
/**
 * 课程的数据库访问接口
 * @author gong
 * @version 1.0
 * @see com.jandan.persistence.sqlmapdao.LessonSqlMapDao
 */
public interface LessonDao {
	/**
	 * 获取某个课程
	 * @param lessonID 课程ID
	 * @return 课程
	 */
    Lesson getLessonByLessonID(long lessonID);
    
    /**
     * 获取某个用户的所有课程
     * @param userID 用户ID
     * @return 课程列表
     */
    List<Lesson> getLessonListByUserID(long userID);
    
    /**
     * 某个在某个词库上创建的课程总数
     * @param wordLibID 词库ID
     * @return 课程总数
     */
    int getLessonsCountByWordLibID(long wordLibID);
    
    /**
     * 插入课程到数据库
     * @param lesson 课程对象
     * @return 所插入的课程的ID
     */
    long insertLesson(Lesson lesson);
    
    /**
     * 更新课程
     * @param lesson 课程对象
     */
    void updateLesson(Lesson lesson);
    
    /**
     * 删除课程
     * @param lessonID 课程ID
     */
    void deleteLesson(long lessonID);
    
    /**
     * 获取某个课程当天的复习信息列表
     * @param lessonID 课程ID
     * @return 复习信息列表
     */
	List<ReviewInfo> getReviewInfoListByToday(long lessonID);
	
	/**
	 * 获取某个课程某天的复习信息
	 * @param lessonID 课程ID和学习日期
	 * @param date 学习日期
	 * @return 复习信息
	 */
	ReviewInfo getReviewInfoOfSomeDay(long lessonID,Date date);
	
	/**
	 * 获取某个课程当天的复习信息
	 * @param lessonID 课程ID
	 * @return 复习信息
	 */
	ReviewInfo getTodayReviewInfo(long lessonID);
	
	/**
	 * 获取某个课程的已学单词总数
	 * @param lessonID 课程ID
	 * @return 已学单词数
	 */
	int getTotalLearnedWordCount(long lessonID);
	
	/**
	 * 获取某个课程已学单词中熟悉程度为掌握的单词总数
	 * @param lessonID 课程ID
	 * @return 已学单词数
	 */
	int getTotalMasterWordCount(long lessonID);
	
	/**
	 * 获取某个课程已学单词中熟悉程度为知道的单词总数
	 * @param lessonID 课程ID
	 * @return 已学单词数
	 */
	int getTotalKnowWordCount(long lessonID);
	
	/**
	 * 获取某个课程已学单词中熟悉程度为陌生的单词总数
	 * @param lessonID 课程ID
	 * @return 已学单词数
	 */
	int getTotalUnknowWordCount(long lessonID);
}
